package com.gll.pojo;

import lombok.Data;

import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

//@Data
//public class Pagination<T> {
//    // 当前页
//    private long pageNow;
//    // 每页显示的条数
//    private long pageCount;
//    // 总条数
//    private long totalCount;
//    // 总页数 = 总条数 / pageCount
//    private long totalPage;
//    // limit 第一个参数
//    private long pageIndex;
//
//    private List<T> resultList;
//    // 用于存放可能存在的查询条件
//    private Map<String, Object> map;
//
//    // 指定当前页数
//    public Pagination(long pageNow) {
//        this(pageNow, 4);
//    }
//
//    // 指定当前页数和每页条数
//    public Pagination(long pageNow, long pageCount) {
//        this.pageNow = pageNow;
//        this.pageCount = pageCount;
//        this.pageIndex = (pageNow - 1) * pageCount;
//    }
//
//    // 总条数set方法
//    public void setTotalCount(long totalCount) {
//        this.totalCount = totalCount;
//        // 总条数 / 每页条数 能否整除
//        if (totalCount % pageCount == 0) {
//            this.totalPage = totalCount / pageCount;
//        } else {
//            this.totalPage = (totalCount / pageCount) + 1;
//        }
//    }
//}

@Data
public class Pagination<T> implements Serializable {
    // 当前页
    private long pageNow;
    // 每页显示的条数
    private long pageCount;
    // 总条数
    private long totalCount;
    // 总页数 = 总条数 / pageCount
    private long totalPage;
    // limit 第一个参数
    private long pageIndex;

    private List<T> resultList;
    // 用于存放可能存在的查询条件
    private Map<String, Object> conditionMap;

    /**
     * 方法描述 该方法仅为RPC提供
     *
     * @author: 游王子
     * @date: 2021/8/2
     */
    public Pagination() {
    }

    // 指定当前页数
    public Pagination(long pageNow) {
        this(pageNow, 8);
    }

    // 指定当前页数和每页条数
    public Pagination(long pageNow, long pageCount) {
        this.pageNow = pageNow;
        this.pageCount = pageCount;
        this.pageIndex = (pageNow - 1) * pageCount;
    }

    // 总条数set方法
    public void setTotalCount(long totalCount) {
        this.totalCount = totalCount;
        // 总条数 / 每页条数 能否整除
        if (totalCount % pageCount == 0) {
            this.totalPage = totalCount / pageCount;
        } else {
            this.totalPage = (totalCount / pageCount) + 1;
        }
    }

    /**
     * 方法描述 添加查询条件
     *
     * @param key
     * @param value
     * @author: 游王子
     * @return: void
     * @date: 2021/8/2
     */
    public void put(String key, Object value) {
        if (this.conditionMap == null)
            this.conditionMap = new HashMap<>();
        this.conditionMap.put(key, value);
    }

    /**
     * 方法描述 添加多个查询条件
     *
     * @param args k1 v1 k2 v2 kn vn ...
     * @author: 游王子
     * @return: void
     * @date: 2021/8/2
     */
    public void put(Object... args) {
        if (this.conditionMap == null)
            this.conditionMap = new HashMap<>();
        for (int i = 0; i < args.length; i += 2) {
            this.conditionMap.put(args[i].toString(), args[i + 1]);
        }
    }

    public Map<String, Object> getConditionMap() {
        if (this.conditionMap == null)
            this.conditionMap = new HashMap<>();
        return this.conditionMap;
    }
}